#include <mysql/mysql.h>
#include <chrono> // 存活设置时间
#include <string>

#include "../comm/log.hpp"

class SqlConn
{
    MYSQL *conn;

public:
    SqlConn()
    {
        conn = mysql_init(nullptr);
    }
    ~SqlConn()
    {
        if (conn != nullptr)
        {
            mysql_close(conn);
        }
    }

    // 建立Sql连接
    bool connect(const std::string &ip, const uint16_t port, const std::string &user, const std::string &password, const std::string &database)
    {
        if (mysql_real_connect(conn, ip.c_str(), user.c_str(), password.c_str(), database.c_str(), port, nullptr, 0) == nullptr)
        {
            ns_log::lg.LogMessage(ns_log::Fatal, "数据库连接失败\n");
            return false;
        }
        mysql_set_character_set(conn, "utf8");
        return true;
    }

    // sql 语句更新操作
    bool update(const std::string &sql)
    {
        if (mysql_query(conn, sql.c_str()) != 0)
        {
            // 访问失败
            ns_log::lg.LogMessage(ns_log::Warning, "数据库 执行失败\n");
            return false;
        }
        return true;
    }

    // sql 语句查询操作
    MYSQL_RES *query(const std::string &sql)
    {
        if (mysql_query(conn, sql.c_str()) != 0)
        {
            // 访问失败
            ns_log::lg.LogMessage(ns_log::Warning, "数据库 执行失败\n");
            return nullptr;
        }
        return mysql_store_result(conn);
    }
};